import win32com.client
import os
from boot import logger


__all__ = ["excel_to_pdf"]


def excel_to_pdf(input_path, output_path, show_excel=False):
    """
    使用win32com将Excel文件转换为PDF。

    :param input_path: Excel文件路径
    :param output_path: 输出的PDF文件路径
    :param show_excel: 是否显示Excel界面，默认为False
    """
    # 确保输入文件存在
    if not os.path.exists(input_path):
        raise FileNotFoundError(f"输入文件 {input_path} 不存在！")

    # 启动Excel应用程序
    excel = win32com.client.Dispatch("Excel.Application")
    excel.Visible = show_excel  # 根据参数决定是否显示Excel界面

    try:
        # 打开Excel文件
        workbook = excel.Workbooks.Open(input_path)

        # 将工作簿保存为PDF
        workbook.ExportAsFixedFormat(0, output_path)  # 0 表示导出为PDF

        logger.info(f"PDF文件已保存到 {output_path}")
    except Exception as e:
        logger.debug(f"转换失败：{e}")
    finally:
        # 确保工作簿和Excel应用程序都能正确关闭
        try:
            workbook.Close(SaveChanges=False)
        except Exception as close_error:
            logger.warning(f"关闭工作簿时出错: {close_error}")
        finally:
            excel.Quit()

